package edu.istu.asu07_1.live.model.agents;

import java.awt.Color;
import java.awt.event.MouseEvent;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JLabel;

import edu.istu.asu07_1.live.configs.Constants;
import edu.istu.asu07_1.live.gui.NotifyPanel;
import edu.istu.asu07_1.live.model.Model;
import edu.istu.asu07_1.live.model.agents.controller.NeuralController;

public class Herb extends Agent{

	private ImageIcon icon;
	private ImageIcon oldIcon;

	public Herb(int xCoord, int yCoord, int moveDirection, int energy, int generation, NeuralController controller, Model model) {
		super(xCoord, yCoord, moveDirection, energy, generation, controller, model);
		init();
	}

	public Herb(Agent parent) {
		super(parent);
		init();
	}

	private void init(){
		icon = new ImageIcon("img/herb/herb.png");
		oldIcon = new ImageIcon("img/herb/herb_old.png");
		iconLabel.addMouseListener(this);
		Constants.CURRENT_HERB_COUNT ++;
	}

	@Override
	public void doStep() {
		energy += getEnergyDecrement();
		liveTime++;
		iconLabel.setBorder(BorderFactory.createEmptyBorder());

		agentsList = model.getAgentsList();

			if(energy >= 90){
				energy /= 2;
				if(Constants.CURRENT_HERB_COUNT<Constants.MAX_HERB_COUNT){
					Agent child = doChild();
				}
			}
		//Пересчет колорийности агента
		colories = energy/4;

		if(liveTime >= Constants.HERB_LIVE_TIME){
			killAgent();
		}
	}
	@Override
	protected Agent doChild() {
		Agent a;
		int newXCoord = 0;
		int newYCoord = 0;
		boolean isClear = true;

		loop: for(int i=(xCoord-1); i<=(xCoord+1); i++){
			for(int j=(yCoord-1); j<=(yCoord+1); j++){
					isClear = true;
					for(int c=0; c<agentsList.size(); c++){
						a = agentsList.get(c);
						if(a.getClass().equals(Herb.class))
						if((a.getxCoord() == verifyXCoord(i))&&(a.getyCoord()==verifyYCoord(j))){
							isClear = false;
							break;
						}
					}
//					Если эта клетка свободна - запоминаем координаты
					if(isClear){
						newXCoord = verifyXCoord(i);
						newYCoord = verifyYCoord(j);
						break loop;
					}
			}
		}
//		Если есть хотя бы одна свободная клетка по-близости,
//		помещаем в нее потомка
		if(isClear){
			a = new Herb(this);
			a.setxCoord(newXCoord);
			a.setyCoord(newYCoord);
			return a;
		}
		return null;
	}

	@Override
	public int killAgent() {
		Constants.CURRENT_HERB_COUNT --;
		return super.killAgent();
	}

	@Override
	public JLabel getImageIcon() {
		if((liveTime+2) >= Constants.HERB_LIVE_TIME){
			iconLabel.setIcon(oldIcon);
			return iconLabel;
		}else{
			iconLabel.setIcon(icon);
			return iconLabel;
		}
	}

	@Override
	protected int getEnergyDecrement() {
		return Constants.HERB_ENERGY_DECRIMENT;
	}

	@Override
	protected int getFeelArea() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	protected int getNearArea() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	protected Class getFoodClass() {
		// TODO Auto-generated method stub
		return null;
	}

}
